Executive Summary

W tym raporcie analizujemy bazę danych materiałów wykorzystywanych w bateriach dostarczoną przez inicjatywę Materials Project. Celem analizy jest zrozumienie i ocena parametrów materiałów, które mają wpływ na wydajność i stabilność baterii.

Instalacja brakujących pakietów

options(repos = c(CRAN = "https://cloud.r-project.org"))
required_packages <- c("dplyr", "tidyr", "ggplot2", "plotly", "readr", "knitr", "corrplot")
new_packages <- required_packages[!(required_packages %in% installed.packages()[, "Package"])]
if(length(new_packages)) install.packages(new_packages)

Wczytanie bibliotek

library(dplyr)
library(tidyr)
library(ggplot2)
library(plotly)
library(readr)
library(knitr)
library(corrplot)

Zapewnienie powtarzalności wyników

set.seed(123) 

Wczytanie danych z pliku CSV

data <- read_csv("mp_batteries.csv")
## Rows: 4351 Columns: 17
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (5): Battery ID, Battery Formula, Working Ion, Formula Charge, Formula ...
## dbl (12): Max Delta Volume, Average Voltage, Gravimetric Capacity, Volumetri...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Zamiana spacji w nazwach kolumn na podkreślenia
colnames(data) <- gsub(" ", "_", colnames(data))
# Podgląd danych
head(data)
## # A tibble: 6 × 17
##   Battery_ID    Battery_Formula Working_Ion Formula_Charge Formula_Discharge
##   <chr>         <chr>           <chr>       <chr>          <chr>            
## 1 mp-30_Al      Al0-2Cu         Al          Cu             Al2Cu            
## 2 mp-1022721_Al Al1-3Cu         Al          AlCu           Al3Cu            
## 3 mp-8637_Al    Al0-5Mo         Al          Mo             Al5Mo            
## 4 mp-129_Al     Al0-12Mo        Al          Mo             Al12Mo           
## 5 mp-91_Al      Al0-12W         Al          W              Al12W            
## 6 mp-1055908_Al Al0-12Mn        Al          Mn             MnAl12           
## # ℹ 12 more variables: Max_Delta_Volume <dbl>, Average_Voltage <dbl>,
## #   Gravimetric_Capacity <dbl>, Volumetric_Capacity <dbl>,
## #   Gravimetric_Energy <dbl>, Volumetric_Energy <dbl>,
## #   Atomic_Fraction_Charge <dbl>, Atomic_Fraction_Discharge <dbl>,
## #   Stability_Charge <dbl>, Stability_Discharge <dbl>, Steps <dbl>,
## #   Max_Voltage_Step <dbl>

Sprawdzenie brakujących wartości

missing_summary <- sapply(data, function(x) sum(is.na(x)))
missing_summary <- data.frame(Variable = names(missing_summary), MissingValues = missing_summary)
missing_summary %>% filter(MissingValues > 0)
## [1] Variable      MissingValues
## <0 wierszy> (lub 'row.names' o zerowej długości)
missing_summary
##                                            Variable MissingValues
## Battery_ID                               Battery_ID             0
## Battery_Formula                     Battery_Formula             0
## Working_Ion                             Working_Ion             0
## Formula_Charge                       Formula_Charge             0
## Formula_Discharge                 Formula_Discharge             0
## Max_Delta_Volume                   Max_Delta_Volume             0
## Average_Voltage                     Average_Voltage             0
## Gravimetric_Capacity           Gravimetric_Capacity             0
## Volumetric_Capacity             Volumetric_Capacity             0
## Gravimetric_Energy               Gravimetric_Energy             0
## Volumetric_Energy                 Volumetric_Energy             0
## Atomic_Fraction_Charge       Atomic_Fraction_Charge             0
## Atomic_Fraction_Discharge Atomic_Fraction_Discharge             0
## Stability_Charge                   Stability_Charge             0
## Stability_Discharge             Stability_Discharge             0
## Steps                                         Steps             0
## Max_Voltage_Step                   Max_Voltage_Step             0

brak brakujących danych

Rozmiar zbioru danych

cat("Liczba obserwacji:", nrow(data), "\n")
## Liczba obserwacji: 4351
cat("Liczba zmiennych:", ncol(data), "\n")
## Liczba zmiennych: 17
# Podstawowe statystyki dla zmiennych liczbowych
summary_stats <- data %>% 
  select(where(is.numeric)) %>%
  summary()
kable(summary_stats, caption = "Podstawowe statystyki dla zmiennych liczbowych")
Podstawowe statystyki dla zmiennych liczbowych
Max_Delta_Volume Average_Voltage Gravimetric_Capacity Volumetric_Capacity Gravimetric_Energy Volumetric_Energy Atomic_Fraction_Charge Atomic_Fraction_Discharge Stability_Charge Stability_Discharge Steps Max_Voltage_Step
Min. : 0.00002 Min. :-7.755 Min. : 5.176 Min. : 24.08 Min. :-583.5 Min. :-2208.1 Min. :0.00000 Min. :0.007407 Min. :0.00000 Min. :0.00000 Min. :1.000 Min. : 0.0000
1st Qu.: 0.01747 1st Qu.: 2.226 1st Qu.: 88.108 1st Qu.: 311.62 1st Qu.: 211.7 1st Qu.: 821.6 1st Qu.:0.00000 1st Qu.:0.086957 1st Qu.:0.03301 1st Qu.:0.01952 1st Qu.:1.000 1st Qu.: 0.0000
Median : 0.04203 Median : 3.301 Median : 130.691 Median : 507.03 Median : 401.8 Median : 1463.8 Median :0.00000 Median :0.142857 Median :0.07319 Median :0.04878 Median :1.000 Median : 0.0000
Mean : 0.37531 Mean : 3.083 Mean : 158.291 Mean : 610.62 Mean : 444.1 Mean : 1664.0 Mean :0.03986 Mean :0.159077 Mean :0.14257 Mean :0.12207 Mean :1.167 Mean : 0.1503
3rd Qu.: 0.08595 3rd Qu.: 4.019 3rd Qu.: 187.600 3rd Qu.: 722.75 3rd Qu.: 614.4 3rd Qu.: 2252.3 3rd Qu.:0.04762 3rd Qu.:0.200000 3rd Qu.:0.13160 3rd Qu.:0.09299 3rd Qu.:1.000 3rd Qu.: 0.0000
Max. :293.19322 Max. :54.569 Max. :2557.627 Max. :7619.19 Max. :5926.9 Max. :18305.9 Max. :0.90909 Max. :0.993333 Max. :6.48710 Max. :6.27781 Max. :6.000 Max. :26.9607

Rozkłady wartości dla kluczowych zmiennych

data %>% 
  select(Average_Voltage, Gravimetric_Capacity, Volumetric_Capacity) %>%
  gather(key = "Variable", value = "Value") %>%
  ggplot(aes(x = Value, fill = Variable)) +
  geom_histogram(bins = 30, alpha = 0.7, position = "identity") +
  facet_wrap(~ Variable, scales = "free") +
  theme_minimal() +
  labs(title = "Rozkłady wartości dla wybranych zmiennych", x = "Wartość", y = "Liczba wystąpień")

Korelacje między zmiennymi liczbowymi

numeric_data <- data %>% select(where(is.numeric)) %>% na.omit()
correlation_matrix <- cor(numeric_data)
corrplot(correlation_matrix, method = "color", tl.cex = 1.2, addCoef.col = "black", number.cex = 0.8)

Wykres interaktywny

plot_ly(data = data, x = ~Gravimetric_Capacity, y = ~Average_Voltage, 
        type = 'scatter', mode = 'markers', 
        marker = list(size = 10, color = 'rgba(152, 0, 0, .8)', line = list(color = 'rgb(0, 0, 0)', width = 2))) %>%
  layout(title = "Zależność pomiędzy pojemnością grawimetryczną a średnim napięciem",
         xaxis = list(title = "Pojemność grawimetryczna (mAh/g)"),
         yaxis = list(title = "Średnie napięcie (V)"))

Model predykcyjny dla Volumetric Energy

model <- lm(Volumetric_Energy ~ Average_Voltage + Max_Delta_Volume + Gravimetric_Capacity, data = data)
summary(model)
## 
## Call:
## lm(formula = Volumetric_Energy ~ Average_Voltage + Max_Delta_Volume + 
##     Gravimetric_Capacity, data = data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -7019.1  -506.2  -115.5   369.7  7395.6 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          -129.2937    34.6952  -3.727 0.000197 ***
## Average_Voltage       425.6157     8.2219  51.766  < 2e-16 ***
## Max_Delta_Volume      -34.4043     2.4005 -14.332  < 2e-16 ***
## Gravimetric_Capacity    3.1210     0.1005  31.062  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 977.2 on 4347 degrees of freedom
## Multiple R-squared:  0.4334, Adjusted R-squared:  0.433 
## F-statistic:  1108 on 3 and 4347 DF,  p-value: < 2.2e-16
# Wykres predykcji
data$Predicted_Volumetric_Energy <- predict(model, data)
ggplot(data, aes(x = Volumetric_Energy, y = Predicted_Volumetric_Energy)) +
  geom_point(color = 'blue', alpha = 0.6) +
  geom_abline(slope = 1, intercept = 0, linetype = "dashed", color = "red") +
  labs(title = "Predykcja gęstości energii w odniesieniu do objętości", 
       x = "Rzeczywista gęstość energii (Wh/L)", 
       y = "Prognozowana gęstość energii (Wh/L)") +
  theme_minimal()

Podsumowanie Najważniejszych Trendów

Na podstawie analizy danych dotyczących materiałów wykorzystywanych w bateriach, zidentyfikowano następujące kluczowe trendy:

  1. Związek między pojemnością grawimetryczną a napięciem: Widzimy, że wyższa pojemność grawimetryczna (Gravimetric Capacity) powoduje dążenie średniego napięcia do zera.

  2. Wpływ zmiany objętości na stabilność: Analiza zmienności objętości (Max Delta Volume) pokazuje, że materiały z mniejszymi zmianami objętości są bardziej stabilne w cyklach ładowania i rozładowania. Wartości te powinny być brane pod uwagę przy wyborze materiałów do produkcji baterii.

  3. Rola udziału atomowego: Udział atomowy składników (Atomic Fraction Charge/Discharge) wydaje się mieć wpływ na gęstość energii (Gravimetric/Volumetric Energy). Materiały z korzystnymi proporcjami atomowymi wykazują lepsze właściwości energetyczne.

  4. Wydajność materiałów: Ogólna analiza wskazuje, że materiały, które mają zarówno wysoką pojemność, jak i stabilność, są bardziej pożądane. Warto zatem skupić się na ich dalszym badaniu i optymalizacji.

  5. Przewidywalność właściwości: Model regresji wskazuje na istotne zmienne wpływające na gęstość energii, co może pomóc w przewidywaniu właściwości nowych materiałów na podstawie ich parametrów.

Dalsze analizy mogą obejmować zastosowanie bardziej zaawansowanych modeli machine learning do przewidywania wydajności materiałów oraz eksplorację innych czynników, które mogą wpływać na stabilność i efektywność baterii.